bitkeeper revision 1.1726.2.4 (42ba7764ufxk9A-swAcfL3FabbYQ2w)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 23 Jun 2005 08:48:36 +0000 (08:48 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 23 Jun 2005 08:48:36 +0000 (08:48 +0000)
Fix alloc_{l2,l3}_table to correctly compute longword-sized virtual
address from int-sized pagetable index. Based on discussion from
Scott Parish and Jan Beulich.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/mm.c

index 0487da6a4408559ffd257a35948fdfcd1dadf09f..d0de3d0d0eced249fd2588b39517683e08b7b8bf 100644 (file)
@@ -753,7 +753,7 @@ static inline int l1_backptr(
 #else
 # define create_pae_xen_mappings(pl3e) (1)
 # define l1_backptr(bp,l2o,l2t) \
-    ({ *(bp) = (l2o) << L2_PAGETABLE_SHIFT; 1; })
+    ({ *(bp) = (unsigned long)(l2o) << L2_PAGETABLE_SHIFT; 1; })
 #endif
 
 static int alloc_l2_table(struct pfn_info *page, unsigned int type)
@@ -821,7 +821,7 @@ static int alloc_l3_table(struct pfn_info *page)
     pl3e = map_domain_page(pfn);
     for ( i = 0; i < L3_PAGETABLE_ENTRIES; i++ )
     {
-        vaddr = i << L3_PAGETABLE_SHIFT;
+        vaddr = (unsigned long)i << L3_PAGETABLE_SHIFT;
         if ( is_guest_l3_slot(i) &&
              unlikely(!get_page_from_l3e(pl3e[i], pfn, d, vaddr)) )
             goto fail;